home *** CD-ROM | disk | FTP | other *** search
- /*
- ==============================================================================
- Project: POV-Ray
-
- Version: 3
-
- File Name: FileQueue.c
-
- Description:
- Generic Macintosh File Spec queueing routine. This is intended to
- be used to collect the list of files passed in via System 7 ODOC
- AppleEvents, for processing at a more convenient time.
-
- This is the main implementation of the functions.
-
- Related Files:
- FileQueue.h - External interface for these routines
- ------------------------------------------------------------------------------
- Author:
- Eduard [esp] Schwan
- ------------------------------------------------------------------------------
- from Persistence of Vision(tm) Ray Tracer
- Copyright 1996 Persistence of Vision Team
- ------------------------------------------------------------------------------
- NOTICE: This source code file is provided so that users may experiment
- with enhancements to POV-Ray and to port the software to platforms other
- than those supported by the POV-Ray Team. There are strict rules under
- which you are permitted to use this file. The rules are in the file
- named POVLEGAL.DOC which should be distributed with this file. If
- POVLEGAL.DOC is not available or for more info please contact the POV-Ray
- Team Coordinator by leaving a message in CompuServe's Graphics Developer's
- Forum. The latest version of POV-Ray may be found there as well.
-
- This program is based on the popular DKB raytracer version 2.12.
- DKBTrace was originally written by David K. Buck.
- DKBTrace Ver 2.0-2.12 were written by David K. Buck & Aaron A. Collins.
- ------------------------------------------------------------------------------
- Change History:
- 920820 [esp] Created
- 921221 [esp] Added logic in Get() routine to call destructor after getting last item
- 931001 [esp] version 2.0 finished (Released on 10/4/93)
- ==============================================================================
- */
-
- #include "config.h"
- #include "FileQueue.h"
- #include "LnkLst.h" // generic list handler
-
- #include <memory.h> // NewHandle
-
-
-
- // a static global instance for our internal use
- LLHeadPtr gFileQueue = NULL;
-
-
- // ------------------------------------------------------------------
- // Initialize the list handling structures prior to use
- void FileQ_c(void)
- {
- gFileQueue = LLCreateList(1);
- } // FileQ_c
-
-
-
- // ------------------------------------------------------------------
- // Add a file to the list
- void FileQ_Put(FSSpecPtr pFSSpecPtr)
- {
- flistptr_t newFlistptr;
-
- // create new record
- newFlistptr = (flistptr_t)NewPtr(sizeof(flistrec_t));
-
- if (newFlistptr)
- {
- // fill it up
- newFlistptr->fFSSpec = *pFSSpecPtr;
-
- #if defined (DO_DEBUG)
- printf("PutFileInList - '%P'\n",newFlistptr->fFSSpec.name);
- #endif // DO_DEBUG
-
- // append it to the list
- LLAppendElement(gFileQueue, newFlistptr);
- }
- } // FileQ_Put
-
-
-
- // ------------------------------------------------------------------
- // Retrieve the next file from the list (increments after each call)
- Boolean FileQ_Get(FSSpecPtr pFSSpecPtr)
- {
- Boolean GotIt = false;
- FSSpecPtr fsp;
-
- if (FileQ_NumItems() > 0)
- {
- // get first off list
- fsp = (FSSpecPtr)LLGetElementByIndex(gFileQueue, 1);
- if (fsp)
- {
- // copy data into parm
- *pFSSpecPtr = *fsp;
- GotIt = true;
- #if defined (DO_DEBUG)
- printf("GetFileFromList - '%P'\n",pFSSpecPtr->name);
- #endif // DO_DEBUG
- // and remove list element
- LLDeleteElementByIndex(gFileQueue, 1);
- // and delete data storage of element
- DisposePtr((Ptr)fsp);
- }
- }
-
- return GotIt;
-
- } // FileQ_Get
-
-
- // ------------------------------------------------------------------
- // Return the # of items in the queue
- short FileQ_NumItems(void)
- {
- return LLGetNumElements(gFileQueue);
- } // FileQ_NumItems
-
-
- // ------------------------------------------------------------------
- // Delete the list and its contents after its use
- void FileQ_d(void)
- {
- LLDestroyList(gFileQueue);
- gFileQueue = NULL;
- } // FileQ_d
-
-